﻿/*
 express服务器文件

 */

'use strict'

let PORT  =7001;

const initMysql = require('./db/initMysql.js');
var myDb=initMysql('localhost','root','root','3306'); //传入mysql 主机名，用户名，密码, 端口
const express = require('express');
const orm  =require('orm');
const path = require('path');
// global.orm = orm;  为了在其他控制器中使用orm.like orm.gt 而在这里加入到全局变量中

let app = express();

//导入body-parser实现获取请求报文体的数据
const bodyParser = require('body-parser');
//app.use(bodyParser());  // 将bodyParser作为第三方包加载到express框架中(express的中间件)
app.use(bodyParser.urlencoded({ extended: false }));

// parse application/json
app.use(bodyParser.json());
console.log('start init database:'+myDb.database);
console.log('3s later servers start');
setTimeout(function(){
    //0.0 链接mysql数据库同时初始化所有的表的模型
    app.use(orm.express("mysql://"+myDb.name+':'+myDb.password+"@"+myDb.host+':'+myDb.port+'/'+myDb.database, {
        define: function (db, models, next) {
            // 在这个地方如果只需要调用一次代码即可全部初始化好就好了
            //models:没有表的模型的，但是有默认的增，删，查，改方法
            //db :数据库连接对象,可以直接执行sql语句

            let modelObj =  require('./model/initModels.js');
            modelObj(db,models,myDb.table);
            next();
        }
    }));

//1.0 设置当前项目的模板引擎为xtpl
    let xtpl = require('xtpl');
    app.set('views',__dirname+'/views');//将来xtpl模板引擎自动去views文件夹中查找所有的模板文件
    console.log(__dirname+'/views');
//app.set('views',path.join(__dirname,'views'));//将来xtpl模板引擎自动去views文件夹中查找所有的模板文件
    app.set('view engine', 'html');//将我们的xtpl扩展名称改成html结尾的模板
//将来碰到html结尾的模板请自动使用xtpl.reanderFile去解析
//将来在这个系统中解析模板的写法改变为：res.render('模板路径',传入的对象,(err,content)=>{})
    app.engine('html',xtpl.renderFile);


//2.0 设置静态资源
    app.use(express.static(__dirname+'/statics'));

//1.0 区分逻辑块
//-> account/*  -> accountRoute
//-> admin/* -> adminRoute

//1.0 导入路由包
    let accountRoute = require('./routes/accountRoute.js');
    let adminRoute = require('./routes/adminRoute.js');

    app.all('/account/*',(req,res,next)=>{
        res.setHeader('Content-Type','text/html;charset=utf8');
        res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});//设置response编码为utf-8
        next();
    });

    app.all('/admin/*',(req,res,next)=>{
        res.setHeader('Content-Type','text/html;charset=utf8');
        res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});//设置response编码为utf-8
        next();
    });

    app.use('/account',accountRoute);
    app.use('/admin',adminRoute);

    const fs = require('fs');
    var FroalaEditor = require('wysiwyg-editor-node-sdk/lib/froalaEditor.js');

    app.use('/bower_components',  express.static(path.join(__dirname, '../bower_components')));

// Path to upload image.
    app.post('/uploads', function (req, res) {
        // Store image.
        FroalaEditor.Image.upload(req, '/statics/uploads/', function(err, data) {
            // Return data.
            data.link=data.link.replace('statics/','')
            if (err) {
                return res.send(JSON.stringify(err));
            }
            res.send(data);
        });
    });

    app.listen(PORT,()=>{
        console.log('servers start: port '+PORT);
    });
},3000);